package com.ziyueyuwen.xiniao.dao;

import com.ziyueyuwen.xiniao.bean.ZyProductInfo;
import com.ziyueyuwen.xiniao.bean.product.*;
import com.ziyueyuwen.xiniao.enums.GradeEnum;
import com.ziyueyuwen.xiniao.enums.ProductClassRuleEnum;
import com.ziyueyuwen.xiniao.enums.ProductPeriodEnum;
import com.ziyueyuwen.xiniao.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * @author wancheng
 */
public interface ZyProductInfoMapper extends BaseMapper<ZyProductInfo>{
    /**
     * 主键获取
     * @param productId
     * @return
     */
    ProductVO selectProduct(Integer productId);

    /**
     * pc端商品列表查询
     * @param productName
     * @param className
     * @param courseName
     * @param ifUpperShelf
     * @return
     */
    List<ProductListVO> getProductListForPc(@Param("productName") String productName,
                                            @Param("className") String className,
                                            @Param("courseName") String courseName,
                                            @Param("ifUpperShelf") Boolean ifUpperShelf);

    /**
     * 获取上架商品的年级
     * @return
     */
    List<GradeEnum> getUpperProductGrade();

    /**
     * 获取上架商品的上课规则
     * @param courseId
     * @return
     */
    List<ProductClassRuleEnum> getUpperProductClassRule(Integer courseId);

    /**
     * 获取上架商品的上课时间段
     * @param courseId
     * @param stageId
     * @param classRule
     * @return
     */
    List<ZyProductInfo> getUpperProductPeriod(@Param("courseId") Integer courseId,
                                                  @Param("stageId")Integer stageId,
                                                  @Param("classRule")ProductClassRuleEnum classRule);

    /**
     * 学生端 商品组查询
     * @param grade
     * @return
     */
    List<ProductStudentGroupVO> getProductGroup(@Param("grade") GradeEnum grade);

    /**
     * 学生端 商品查询
     * @param courseId
     * @param stageId
     * @param classRule
     * @param period
     * @return
     */
    List<ProductStudentListVO> getStudentProductList(@Param("courseId") Integer courseId,
                                                     @Param("stageId")Integer stageId,
                                                     @Param("classRule")ProductClassRuleEnum classRule,
                                                     @Param("period")ProductPeriodEnum period);

    /**
     * 学生端 商品信息查询
     * @param productId
     * @return
     */
    ProductStudentListVO getStudentProductInfoByProductId(Integer productId);

    /**
     * 获取商品的课程信息分组,用于销售查看
     * @param grade
     * @return
     */
    List<SaleCourseVO> getProductCourseInfo(@Param("grade") GradeEnum grade);

    /**
     * 在售商品对应班级是否售罄,返回班级的老师,去重复
     * @param courseId
     * @return
     */
    List<SaleTeacherStatus> productTeacherStatus(@Param("courseId") Integer courseId);

    /**
     * 销售查看详情
     * @param query
     * @return
     */
    List<SaleCourseDetailsVO> getSaleCourseDetails(SaleCourseDetailsQuery query);

    /**
     * 在售课程的剩余学生数量
     * @param courseId
     * @return
     */
    Integer getStudentAvailable(Integer courseId);
}